]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
volume: Show OSD popup when changing volume via scroll
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 9 Jun 2017 14:06:39 +0000 (16:06 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 13 Jul 2017 10:28:15 +0000 (12:28 +0200)
It is possible to use the scroll wheel to adjust the volume without
opening the system menu, but there is no feedback other than the
icon itself in that case. To provide a less coarse indication for
the volume level, display the OSD window when adjusting the volume
while the slider isn't visible.

https://bugzilla.gnome.org/show_bug.cgi?id=781028

js/ui/status/volume.js

index 831b0019708c71c6f37b594a50c2ef8fdaf9f475..1922c3a376990ec3e40049837efdc22f23702f40 100644 (file)
@@ -7,6 +7,7 @@ const Gvc = imports.gi.Gvc;
 const St = imports.gi.St;
 const Signals = imports.signals;
 
+const Main = imports.ui.main;
 const PanelMenu = imports.ui.panelMenu;
 const PopupMenu = imports.ui.popupMenu;
 const Slider = imports.ui.slider;
@@ -149,6 +150,13 @@ const StreamSlider = new Lang.Class({
                 return 'audio-volume-high-symbolic';
             return 'audio-volume-medium-symbolic';
         }
+    },
+
+    getLevel: function() {
+        if (!this._stream)
+            return null;
+
+        return 100 * this._stream.volume / this._control.get_vol_max_norm();
     }
 });
 Signals.addSignalMethods(StreamSlider.prototype);
@@ -298,6 +306,10 @@ const VolumeMenu = new Lang.Class({
 
     getIcon: function() {
         return this._output.getIcon();
+    },
+
+    getLevel: function() {
+        return this._output.getLevel();
     }
 });
 
@@ -329,6 +341,13 @@ const Indicator = new Lang.Class({
     },
 
     _onScrollEvent: function(actor, event) {
-        return this._volumeMenu.scroll(event);
+        let result = this._volumeMenu.scroll(event);
+        if (result == Clutter.EVENT_PROPAGATE || this.menu.actor.mapped)
+            return result;
+
+        let gicon = new Gio.ThemedIcon({ name: this._volumeMenu.getIcon() });
+        let level = this._volumeMenu.getLevel();
+        Main.osdWindowManager.show(-1, gicon, null, level);
+        return result;
     }
 });